﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>

void set_arr(int temp[10],int size)
{
	for (int i = 0; i < size; i++)
	{
		temp[i] = -1;
	}
}
bool is_leap_year(int year)
{
	if (((year % 4 == 0) && (year % 10 != 0)) || (year % 400 == 0))
	{
		return true;
	}
	else return false;
}
void get_days_of_month(int year, int month)
{
	int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int day = arr[month];
	if (is_leap_year(year) && month == 2)
	{
		day++;
	}
	printf("%d\n", day);
}
int main(void)
{
	/*	函数
		形参是实参的⼀份临时拷⻉
		return后边也可以什么都没有，直接写 return; 这种写法适合函数返回类型是void的情况
		return语句执⾏后，函数就彻底返回，后边的代码不再执⾏。
•		如果函数中存在if等分⽀的语句，则要保证每种情况下都有return返回，否则会出现编译错误
		函数的返回类型没写时默认返回int型，如果没写返回值，则返回值不确定
		数组传参：形参操作的数组和实参的数组是同⼀个数组
		函数功能要单一，便于复用
		形参如果是⼀维数组，数组⼤⼩可以省略不写
•		形参如果是⼆维数组，⾏可以省略，但是列不能省略
•		数组传参，形参是不会创建新的数组的
	*/
	int arr[10] = { 0 };
	int size;
	size = sizeof(arr) / sizeof(arr[0]);
	set_arr(arr, size);

	/*	函数的嵌套调用
		链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数，像链条⼀样将函数串起来
		printf函数返回的是打印在屏幕上的字符的个数
		函数声明中参数只保留类型，省略掉名字也是可以的
		保护源码：修改属性为静态库，使用时要导入静态库
	*/
	int year = 0, month = 0;
	size=scanf("%d %d", &year, &month);
	get_days_of_month(year, month);
	printf("%d", printf("%d", printf("%d", 43)));
	/*
		static:其实编译器在编译代码时，就为静态变量分配了地址而不是进入函数创建这种变量
		extern:全局变量是默认带有外部链接属性的，static修饰全局变量时，改变了全局变量的链接属性
		变成内部链接属性
		函数也是有外部链接属性的，只要声明就可以使用，static对函数作用相同
		没有头文件可以声明外部函数，头文件是其等效
	*/
	return 0;
}
